package main

import (
	"consul/pb"
	"context"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"strconv"
)

func main() {

	// 1. 初始化consul配置
	consulConfig := api.DefaultConfig()

	// 2. 创建consul对象  -- (可以重新指定consul属性:IP/Port，也可以使用默认)
	consulClient, _ := api.NewClient(consulConfig)

	// 3. 服务发现， 从consul上获取健康的服务
	services, _, err := consulClient.Health().Service("grpc And Consul", "grpc", true, nil)
	addr := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)

	/*
	   以下是grpc服务远程调用
	*/

	// 1.连接服务
	//grpcConn, _ := grpc.Dial("127.0.0.1:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
	// 使用服务发现consul上IP、port来与服务建立连接
	grpcConn, _ := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))

	// 2. 初始化grpc客户端
	grpcClient := pb.NewHelloClient(grpcConn)

	var person pb.Person
	person.Name = "CC"
	person.Age = 18

	// 3. 调用远程函数
	p, err := grpcClient.TestConsul(context.TODO(), &person)
	fmt.Println(p, err)
}
